package com.unitd.app.param.controller;

import com.unitd.frame.comm.utils.CharsetUtils;
import com.unitd.frame.sso.common.config.SSOConfig;
import com.unitd.frame.sso.common.config.SSOProperties;
import com.unitd.frame.sso.common.helper.AjaxHelper;
import com.unitd.frame.sso.common.helper.SSOHelper;
import com.unitd.frame.sso.common.token.AuthToken;
import com.unitd.frame.sso.common.token.SSOToken;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;

/**
 * @desc 跨域登陆成功后, 获取跨域授权Token并设置相应的cookie
 * 考虑到 浏览器 url 地址长度限制,跨域不采用地址重定向方式、依旧使用  jsonp 跨域
 * IE6.0                    :url最大长度2083个字符,超过最大长度后无法提交.
 * IE7.0                    :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符.
 * firefox 3.0.3            :url最大长度7764个字符,超过最大长度后无法提交.
 * Opera 9.52               :url最大长度7648个字符,超过最大长度后无法提交.
 * Google Chrome 2.0.168    :url最大长度7713个字符,超过最大长度后无法提交
 * @filename OkLoginController.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/4
 */
@Controller
public class OkLoginController extends BaseController {

	/**
	 * @desc 跨域登录成功后, 处理相关token和cookie
	 */
	@ResponseBody
	@RequestMapping("/oklogin")
	public void oklogin() {
		String returl = "http://my.web.com:8090/timeout.html";
		/*
		 * 回复密文是否存在
		 * SSO 公钥验证回复密文是否正确
		 * 设置 PARAM 系统自己的 Cookie
		 */
		String replyTxt = request.getParameter("replyTxt");
		if (replyTxt != null && !"".equals(replyTxt)) {
			/*
			 * 用户自定义配置获取
			 * 由于不确定性,SSO 提倡,用户自己定义配置
			 */
			SSOProperties prop = SSOConfig.getSSOProperties();

			AuthToken at = SSOHelper.ok(request, response, replyTxt, prop.get("sso.defined.my_public_key"),
					prop.get("sso.defined.sso_public_key"));
			if (at != null) {
				returl = "http://my.web.com:8090/index.html";
				SSOToken st = new SSOToken();
				st.setUid(at.getUid());
				st.setTime(at.getTime());

				// 设置 true 时添加 cookie 同时销毁当前 JSESSIONID 创建信任的 JSESSIONID
				SSOHelper.setSSOCookie(request, response, st, true);
			}
		}
		try {
			AjaxHelper.outPrint(response, "{\"returl\":\"" + returl + "\"}", CharsetUtils.UTF_8.name());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
